home *** CD-ROM | disk | FTP | other *** search
Wrap
GW-BASIC | 1986-11-25 | 34.1 KB | 1,194 lines
10000 CLS:SCREEN 1:COLOR 8,2:KEY OFF 10010 GOSUB 10070 ' define arrays, constants and variables 10020 GOSUB 10260 ' define all kinds of arrows 10030 GOSUB 14790 ' divide the screen 10040 DRAW"bm160,100":COLOR 7,0 10050 GOSUB 11700 ' main loop 10060 REM = arrays & constants ==== 10070 DEFINT A,W,I,D,B 10080 KEY(10) ON:ON KEY(10) GOSUB 21310 'interup a crazy subroutine 10090 ON ERROR GOTO 18210:COLOR 1 10100 DIR=1:FRAME=1:RATIO=1:NEWPR=0:SCORE=0:UPDOWN$="down" 10110 DIM ARRW(6,7,2),BOX(20),PNT%(3),WERASE(41),WUP(17),WDOWN(33),DAYS$(6) 10120 DIM ARROW(6),T$(20),SUB$(119),SUBNAME$(119),CRSR%(9),CRSRI%(9):COLOR 5 10130 DIM SUBSTCK$(40),STCKNAME$(40),STCKLOOP(40):STCKMAX=40 10140 DIM SCRL(856),SCRM(2139),SCRR(856),VAR(9),TEXTCRS%(9),BRUB(9),BRUBV(16) 10150 BACK$=CHR$(29)+CHR$(0)+CHR$(29):COLOR 2 10160 ERS$=STRING$(8,0):ERS=0:XC=70:XL=70:YC=0:YL=0 10170 E=3:CLRF=0:CLRB=3:TEXTURE=&HFFFF:COLOR 4 10180 X=160:Y=104:STP=8:DX=2:DY=2:C=3:TM=0 10190 AVAILSUB=-1:MAXSUB=87:PRGRM=0:RUBON=0:DAYREM=1 10200 SREM=0:TREM=-1:SSREM=0:TTREM=-1:HREM=0:MINREM=0:HOUREM=0:AMPMREM$="A" 10210 CRNTSUB=-1 ' current sub pointer 10220 WDTH=1:BCKGR=7:PLT=0:BCKGR$="white":COLOR BCKGR,PLT 10230 ARROW(0)=10:ARROW(1)=5:VARPR=0:SCRPOS$="right":FSTSLW=0 10240 GET(1,1)-(69,190),SCRL:GET(70,1)-(248,190),SCRM:GET(249,1)-(317,190),SCRR 10250 RETURN 10260 REM == arrows and other cursors === 10270 FOR W=0 TO 2:FOR D=0 TO 7:COLOR D+8:FOR I=0 TO 6 10310 READ ARRW(I,D,W) 10320 NEXT I:NEXT D:NEXT W 10350 DATA 10,5,12,15,-16132,15,12 10360 DATA 10,5,192,51,15,63,0 10370 DATA 10,5,12,12,-16129,51,12 10380 DATA 10,5,-16384,51,60,63,0 10390 DATA 10,5,12,60,-16177,60,12 10400 DATA 10,5,0,63,60,51,-16384 10410 DATA 10,5,12,51,-16129,12,12 10420 DATA 10,5,0,63,15,51,192 10430 DATA 10,5,12,-16369,-16132,-16369,12 10440 DATA 10,5,192,51,15,-16321,3 10450 DATA 10,5,12,12,-16129,51,63 10460 DATA 10,5,-16384,51,60,255,48 10470 DATA 10,5,12,252,-16177,252,12 10480 DATA 10,5,48,255,60,51,-16384 10490 DATA 10,5,63,51,-16129,12,12 10500 DATA 10,5,3,-16321,15,51,192 10510 DATA 10,5,-16369,-16372,-16132,-16372,-16369 10520 DATA 10,5,192,51,-16369,63,12 10530 DATA 10,5,12,12,-16129,-16192,-16129 10540 DATA 10,5,-16384,51,252,63,12 10550 DATA 10,5,252,204,-16177,204,252 10560 DATA 10,5,12,63,252,51,-16384 10570 DATA 10,5,-16129,-16192,-16129,12,12 10580 DATA 10,5,12,63,-16369,51,192 10590 FOR I=2 TO 6:ARROW(I)=ARRW(I,0,0):NEXT I 10600 WERASE(0)=80:WERASE(1)=8 10610 FOR I=2 TO 41:WERASE(I)=-1:NEXT 10620 WUP(0)=32:WUP(1)=8 10630 FOR I=2 TO 17:WUP(I)=-1:NEXT 10640 WDOWN(0)=64:WDOWN(1)=8 10650 FOR I=2 TO 33:WDOWN(I)=-1:NEXT 10660 FOR I=0 TO 9 10670 READ CRSR%(I) 10680 NEXT I 10690 FOR I=0 TO 9 10700 READ CRSRI%(I) 10710 NEXT 10720 FOR I=0 TO 9 10730 READ TEXTCRS%(I) 10740 NEXT 10750 DATA 16,8,0,0,0,0,0,0,-1,-1 10760 DATA 16,8,0,0,0,-1,-1,-1,-1,-1 10770 DATA 16,8,-1,-1,-1,-1,-1,-1,-1,-1 10780 FOR I=0 TO 3 10790 READ PNT%(I) 10800 NEXT I 10810 DATA 6,3,12288,0 10820 BRUB(0)=16:BRUB(1)=8:BRUBV(0)=20:BRUBV(1)=10 10830 FOR I=2 TO 9:BRUB(I)=0:NEXT I 10840 FOR I=2 TO 16 10850 READ BRUBV(I) 10860 NEXT I 10870 DATA -1,-16144,12288,192,-16336,12288,192,-16336,12288,192,-16336 10880 DATA 12288,192,-208,-3841 10890 FOR I=0 TO 6:READ DAYS$(I):NEXT I 10900 DATA "Saturday ","Sunday ","Monday ","Tuesday " 10910 DATA "Wednesday","Thursday ","Friday " 10920 RETURN 10930 REM = erase menu ==== 10940 LINE(0,0)-(69,191),0,BF 10950 RETURN 10960 REM == MENUS' SECTION === 10970 REM == main menu ==== 10980 GOSUB 10930 ' erase previous menu 10990 'main menu 11000 LOCATE 1,1:PRINT "draw":PRINT:PRINT"paint":PRINT:PRINT"change":PRINT 11010 PRINT"picture":PRINT:PRINT"type":PRINT:PRINT"program":PRINT 11020 PRINT"clock":PRINT:PRINT"week":PRINT:PRINT "exit" 11030 RETURN 11040 ' draw menu 11050 GOSUB 10930 11060 LOCATE 1,1:PRINT "left":PRINT"right":PRINT"ahead":PRINT"back":PRINT"turn" 11070 PRINT:PRINT "up,down":IF E=0 THEN PUT(0,49),WUP ELSE PUT(23,48),WDOWN 11080 PRINT:PRINT "center-":PRINT "circle":PRINT:PRINT"line-end":PRINT 11090 PRINT "erase":IF ERS=1 THEN PUT(0,105),WERASE 11100 PRINT:PRINT "box-fix":PRINT"put":PRINT"sprite":PRINT 11110 PRINT "program":PRINT "var(#=)":PRINT "status":PRINT"quit"; 11120 LINE(70,0)-(319,191),CLRB,B 11130 RETURN 11140 ' picture menu 11150 GOSUB 10930 11160 LOCATE 1,1:PRINT "save":PRINT:PRINT"load":PRINT:PRINT"name":PRINT 11170 PRINT "frame":PRINT:PRINT"screen":PRINT:PRINT"print":PRINT 11180 PRINT"files":PRINT:PRINT "program":PRINT:PRINT:PRINT"quit" 11190 IF FRAME=1 THEN PUT(0,48),WERASE 11200 RETURN 11210 ' paint menu 11220 GOSUB 10930 11230 LOCATE 1,1:PRINT "ground":PRINT:PRINT"fill":PRINT:PRINT"arrow":PRINT 11240 PRINT "program":PRINT:PRINT:PRINT"quit" 11250 RETURN 11260 ' color menu 11270 GOSUB 10930 11280 LOCATE 1,1:PRINT "red":PRINT:PRINT"green":PRINT:PRINT"blue":PRINT 11290 PRINT"white":PRINT:PRINT"yellow":PRINT:PRINT"black":PRINT:PRINT"grey" 11300 PRINT:PRINT"brown":PRINT:PRINT"purple" 11310 PRINT:PRINT"bright":PRINT:PRINT"program":PRINT:PRINT"quit"; 11320 RETURN 11330 ' drawing color 11340 GOSUB 10930 11350 LOCATE 1,3:PRINT" ";0 11360 PRINT "green":PRINT "red":PRINT "brown" 11370 LOCATE 6,3:PRINT" ";1 11380 PRINT "cyan":PRINT "purple":PRINT "white" 11390 LOCATE 12,1:PRINT"quit" 11400 RETURN 11410 ' change menu 11420 GOSUB 10930 11430 LOCATE 1,1:PRINT"new":PRINT:PRINT"wide":PRINT"narrow":PRINT:PRINT"step" 11440 PRINT:PRINT "visible":PRINT:PRINT"undo":PRINT:PRINT"eastwest":PRINT 11450 PRINT "net":PRINT:PRINT"flat":PRINT"tall":PRINT:PRINT"program" 11460 LOCATE 22,1:PRINT "quit" 11470 RETURN 11480 REM == SUB -- READ COMMAND ==== 11490 A$="" : B$="" : LOOP=1 : SWITCH=0 : LOOP$="" : FIRST=0 11500 LOCATE 25,1 11510 WHILE B$<>CHR$(13) 11520 IF CRNTSUB=-1 THEN B$=INKEY$ ELSE GOSUB 16590 11530 IF LEN(B$)=2 THEN B$=MID$(B$,2,1):IF ASC(B$)=75 THEN IF POS(1)<>1 THEN B$=BACK$ 11540 IF B$=CHR$(8) THEN IF POS(1)<>1 THEN B$=BACK$ 11550 IF POS(0)=39 THEN LINE(0,192)-(320,200),0,BF:LOCATE 25,1 11560 IF FIRST=0 AND B$<>"" THEN FIRST=1 : LINE(0,192)-(320,200),0,BF 11570 IF B$="," AND PRGRM=0 THEN B$=CHR$(13) 11580 IF B$>CHR$(19) THEN PRINT B$; 11590 IF B$>CHR$(64) AND B$<CHR$(91) THEN B$=CHR$(ASC(B$)+32) 11600 IF B$=" " AND PRGRM=0 THEN SWITCH=1 11610 IF B$<>CHR$(13) THEN IF SWITCH=0 THEN A$=A$+B$ ELSE LOOP$=LOOP$+B$ 11620 IF B$=BACK$ THEN IF SWITCH=0 THEN A$=MID$(A$,1,LEN(A$)-4) ELSE LOOP$=MID$(LOOP$,1,LEN(LOOP$)-4) 11630 WEND 11640 LOOP=VAL(LOOP$):IF LOOP=0 THEN LOOP=1 11650 IF LEFT$(LOOP$,4)=" var" THEN LOOP=VAR(VAL(MID$(LOOP$,5,1))) 11660 IF LEFT$(A$,3)="var" AND MID$(A$,5,1)<>"=" AND A$<>"var" THEN A$=MID$(STR$(VAR(VAL(MID$(A$,4,1)))),2,2) 11670 LINE(0,192)-(320,200),0,BF 11680 RETURN 11700 REM == MAIN LOOP ==== 11710 DUMMY=0:PUT(X-DX,Y-DY),ARROW 11720 WHILE DUMMY<>1 11730 GOSUB 10970 ' menu 11740 GOSUB 11480 ' command 11750 IF A$="draw" THEN GOSUB 11890 11760 IF A$="paint" THEN GOSUB 13390 11770 IF A$="change" THEN GOSUB 14280 11780 IF A$="picture" THEN GOSUB 14890 11790 IF A$="exit" THEN GOSUB 14860 11800 IF A$="program" THEN GOSUB 16340 11810 IF A$="clock" THEN GOSUB 21650 11820 IF A$="type" THEN GOSUB 19670 11830 IF A$="week" THEN GOSUB 21390 11850 FOR S=0 TO AVAILSUB:IF A$=SUBNAME$(S) THEN GOSUB 16500 11860 NEXT S 11870 WEND 11880 RETURN 11890 REM == SUB -- DRAW ====== 11900 GOSUB 11040 11910 GOSUB 11480:SLCT=0 11930 IF A$="var" THEN GOSUB 19370 11940 IF A$="line" THEN GOSUB 12320 11950 IF A$="center" THEN GOSUB 12170 11960 IF A$="left" THEN SLCT=1 ELSE IF A$="right" THEN SLCT=2 ELSE IF A$="ahead" THEN SLCT=3 ELSE IF A$="back" THEN SLCT=4 ELSE IF A$="turn" THEN SLCT=5 11970 IF A$="up" THEN GOSUB 12540 ELSE IF A$="down" THEN GOSUB 12580 ELSE IF A$="erase" THEN GOSUB 14500 11980 IF A$="status" THEN GOSUB 19430 11990 IF A$="box" THEN GOSUB 13220 12000 IF A$="fix" THEN GOSUB 13250 12010 IF A$="put" THEN GOSUB 13360 12020 IF A$="sprite" THEN GOSUB 20260 12030 IF A$="f1" OR A$="circle" THEN GOSUB 12200 12040 IF A$="f2" OR A$="end" THEN GOSUB 12350 12050 IF LEFT$(A$,3)="var" THEN GOSUB 19180 12060 FOR L=1 TO LOOP 12070 ON SLCT GOSUB 12390,12430,12470,12500,13180 12080 NEXT L 12090 IF A$="program" THEN GOSUB 16340:GOSUB 11040 12100 FOR S=0 TO AVAILSUB:IF A$=SUBNAME$(S) THEN GOSUB 16500 12110 NEXT S 12130 IF A$="if.neg" THEN GOSUB 21340 12140 IF A$<>"quit" THEN 11910 12150 A$="" 12160 RETURN 12170 ' circle == 12180 XC=X : YC=Y 12190 RETURN 12140 12200 R=SQR((XC-X)^2+((YC-Y)/RATIO)^2):IF RATIO>1 THEN R=R*RATIO 12210 PUT(X-DX,Y-DY),ARROW 12220 VIEW(70,0)-(319,191) 12230 IF ERS=1 THEN CL=0 ELSE CL=CLRB 12240 CIRCLE(XC-70,YC),R,CL,,,RATIO 12250 IF WDTH=1 THEN GOTO 12290 12260 FOR W=1 TO WDTH-1 12270 CIRCLE(XC-70,YC),R+W,CL,,,RATIO:CIRCLE(XC-70,YC),R-W,CL,,,RATIO 12280 NEXT W 12290 VIEW 12300 PUT(X-DX,Y-DY),ARROW 12310 RETURN 12140 12320 ' line 12330 XL=X : YL=Y 12340 RETURN 12140 12350 PUT(X-DX,Y-DY),ARROW:IF ERS=1 THEN CL=0 ELSE CL=CLRB 12370 LINE(XL,YL)-(X,Y),CL:PUT(X-DX,Y-DY),ARROW 12380 RETURN 12140 12390 'left === 12400 DIR=DIR-2:IF DIR<1 THEN DIR=DIR+8 12410 GOSUB 12620 12420 RETURN 12430 'right == 12440 DIR=DIR+2:IF DIR>8 THEN DIR=DIR-8 12450 GOSUB 12620 12460 RETURN 12470 'ahead == 12480 GOSUB 12620 12490 RETURN 12500 'BACK === 12510 DIR=DIR+4:IF DIR>8 THEN DIR=DIR-8 12520 GOSUB 12620 12530 RETURN 12540 ' up == 12550 IF UPDOWN$="down" THEN PUT(0,49),WUP:PUT(23,48),WDOWN 12560 UPDOWN$="up":E=0 12570 RETURN 12580 ' down == 12590 IF UPDOWN$="up" THEN PUT(0,49),WUP:PUT(23,48),WDOWN 12600 UPDOWN$="down":E=CLRB 12610 RETURN 12620 ' modify ARROW and x,y == 12630 PUT(X-DX,Y-DY),ARROW 12640 ON DIR GOSUB 13020,13040,13060,13080,13100,13120,13140,13160 12650 GOSUB 12690 12660 IF UPDOWN$="down" OR ERS=1 THEN GOSUB 12740 12670 X=X1 : Y=Y1 :PUT(X-DX,Y-DY),ARROW 12680 RETURN 12690 'change arrow when wdth or dir changes 12700 FOR I=2 TO 6 12710 ARROW(I)=ARRW(I,DIR-1,WDTH-1) 12720 NEXT I 12730 RETURN 12740 ' draw a line === 12750 LINE(X,Y)-(X1,Y1),E 12760 IF WDTH=1 THEN RETURN 12770 D=(DIR MOD 4)+1 12780 ON D GOTO 12960,12840,12900,12790 12790 FOR I=1 TO WDTH-1 12810 LINE(X-I,Y)-(X1-I,Y1),E:LINE(X+I,Y)-(X1+I,Y1),E 12820 NEXT I 12830 RETURN 12840 FOR I=1 TO WDTH-1 12860 LINE(X,Y-I)-(X1,Y1-I),E:LINE(X,Y+I)-(X1,Y1+I),E 12870 NEXT I 12880 RETURN 12900 LINE(X+1,Y)-(X1+1,Y1),E:LINE(X,Y+1)-(X1,Y1+1),E 12910 IF WDTH=2 THEN RETURN 12930 LINE(X+1,Y-1)-(X1+1,Y1-1),E:LINE(X-1,Y+1)-(X1-1,Y1+1),E 12940 RETURN 12960 LINE(X+1,Y)-(X1+1,Y1),E:LINE(X,Y-1)-(X1,Y1-1),E 12970 IF WDTH=2 THEN RETURN 12990 LINE(X+1,Y+1)-(X1+1,Y1+1),E:LINE(X-1,Y-1)-(X1-1,Y1-1),E 13000 RETURN 13010 ' 13020 X1=X+STP : Y1=Y : IF X1>317 THEN X1=X:BEEP 13030 RETURN 13040 X1=X+STP : Y1=Y+STP : IF X1>317 OR Y1>189 THEN X1=X:Y1=Y:BEEP 13050 RETURN 13060 X1=X : Y1=Y+STP : IF Y1>189 THEN Y1=Y:BEEP 13070 RETURN 13080 X1=X-STP : Y1=Y+STP : IF X1<72 OR Y1>189 THEN X1=X:Y1=Y:BEEP 13090 RETURN 13100 X1=X-STP : Y1=Y : IF X1<72 THEN X1=X:BEEP 13110 RETURN 13120 X1=X-STP : Y1=Y-STP : IF X1<72 OR Y1<2 THEN X1=X:Y1=Y:BEEP 13130 RETURN 13140 X1=X : Y1=Y-STP : IF Y1<2 THEN Y1=Y:BEEP 13150 RETURN 13160 X1=X+STP : Y1=Y-STP : IF X1>317 OR Y1<2 THEN X1=X:Y1=Y:BEEP 13170 RETURN 13180 'turn === 13190 DIR=DIR-1:IF DIR<1 THEN DIR=DIR+8 13200 GOSUB 12620 13210 RETURN 13220 'box == 13230 XB=X : YB=Y 13240 RETURN 12140 13250 'fix == 13260 ERASE BOX 13270 XC=X : YC=Y 13280 IF XC>XB THEN SWAP XC,XB 13290 IF YC>YB THEN SWAP YC,YB 13310 PUT(X-DX,Y-DY),ARROW:IN=(4+INT((XB-XC+1)*2+7)/8)*(YB-YC+1)/2 13320 DIM BOX(IN):GET(XB,YB)-(XC,YC),BOX:PUT(X-DX,Y-DY),ARROW 13350 RETURN 12140 13360 'put == 13370 PUT(X,Y),BOX 13380 RETURN 12140 13390 ' PAINT 13400 A$="" 13410 WHILE A$<>"quit" 13420 GOSUB 11210 13430 GOSUB 11480 13440 IF A$="ground" THEN GOSUB 13540 13450 IF A$="fill" THEN GOSUB 15690 13460 IF A$="arrow" THEN GOSUB 14140 13470 IF A$="program" THEN GOSUB 16340 13480 FOR S=0 TO AVAILSUB:IF A$=SUBNAME$(S) THEN GOSUB 16500 13490 NEXT S 13510 WEND 13520 A$="" 13530 RETURN 13540 ' color === 13550 GOSUB 11260 13560 A$="" 13570 WHILE A$<>"quit" 13580 GOSUB 11480:BC=-1 13590 IF A$="red" THEN BC=4 13600 IF A$="green" THEN BC=2 13610 IF A$="blue" THEN BC=1 13620 IF A$="white" THEN BC=7 13630 IF A$="brown" THEN BC=6 13640 IF A$="purple" THEN BC=5 13650 IF A$="yellow" THEN BC=14 13660 IF A$="black" THEN BC=0 13670 IF A$="grey" THEN BC=8 13680 IF A$="bright" THEN BC=BCKGR+8 13690 IF BC<>-1 THEN BCKGR=BC:IF BC<8 THEN BCKGR$=A$ 13700 IF A$="program" THEN GOSUB 16340 13710 FOR S=0 TO AVAILSUB:IF A$=SUBNAME$(S) THEN GOSUB 16500 13720 NEXT S 13740 COLOR BCKGR,PLT 13750 WEND 13760 A$="" 13770 RETURN 13780 ' 13790 IF CRNTSUB=-1 THEN RETURN 13800 FOR S=0 TO AVAILSUB 13810 IF A$=SUBNAME$(S) THEN GOSUB 16500 13820 NEXT S 13830 RETURN 13840 ' color fill ==== 13850 IF PLT=0 THEN GOSUB 13920 13860 IF PLT=1 THEN GOSUB 14030 13870 IF C<>-1 THEN CLRF=C 13880 PUT(X-DX,Y-DY),ARROW 13890 PAINT(X,Y),CLRF,CLRB 13900 PUT(X-DX,Y-DY),ARROW 13910 RETURN 15690 13920 ' filling and drawing color - plt=0 = 13930 GOSUB 10930 13940 LOCATE 1,1:PRINT 0:PRINT BCKGR$ 13950 PRINT 1:PRINT "green":PRINT 2:PRINT"red":PRINT 3:PRINT"brown" 13960 LOCATE 14,1:PRINT "go" 13970 A$="":C=-1 13980 WHILE A$<>"go" 13990 GOSUB 11480 14000 IF A$>="0" AND A$<="3" THEN C=VAL(A$) 14010 WEND 14020 RETURN 14030 ' filling and drawing color - plt=1 = 14040 GOSUB 10930 14050 LOCATE 1,1:PRINT 0:PRINT BCKGR$:PRINT:PRINT 1:PRINT "cyan" 14060 PRINT:PRINT 2:PRINT "purple":PRINT:PRINT 3:PRINT "white" 14070 LOCATE 14,1:PRINT "go" 14080 A$="":C=-1 14090 WHILE A$<>"go" 14100 GOSUB 11480 14110 IF A$>="0" AND A$<="3" THEN C=VAL(A$) 14120 WEND 14130 RETURN 14140 ' changing drawing color == 14150 GOSUB 11330 14160 A$="" 14170 WHILE A$<>"quit" 14180 GOSUB 11480 14190 IF A$="0" THEN PLT=0:GOSUB 13920 14200 IF A$="1" THEN PLT=1:GOSUB 14030 14210 IF C<>-1 THEN E=C : CLRB=C 14220 IF A$<>"quit" THEN GOSUB 11330 14230 LINE(70,0)-(319,191),CLRB,B:COLOR BCKGR,PLT 14240 WEND 14250 LINE(70,0)-(319,191),CLRB,B:A$="" 14270 RETURN 14280 ' change ==== 14290 GOSUB 11410:A$="" 14300 WHILE A$<>"quit" 14310 GOSUB 11480:SLCT=0 14320 IF A$="new" THEN GOSUB 16260 14330 IF A$="wide" THEN SLCT=1 ELSE IF A$="narrow" THEN SLCT=2 14340 IF A$="step" THEN GOSUB 14700 14350 IF A$="visible" THEN GOSUB 14830 14360 IF A$="program" THEN GOSUB 16340 14370 IF A$="eastwest" THEN IF SCRPOS$="right" THEN GOSUB 14580 ELSE GOSUB 14620 14380 IF A$="net" THEN GOSUB 20120 14390 IF A$="undo" THEN GOSUB 20210 14400 IF A$="tall" THEN SLCT=3 ELSE IF A$="flat" THEN SLCT=4 14410 FOR S=0 TO AVAILSUB:IF A$=SUBNAME$(S) THEN GOSUB 16500 14420 NEXT S 14440 FOR L=1 TO LOOP 14450 ON SLCT GOSUB 14540,14660,14730,14760 14460 NEXT L 14470 WEND 14480 A$="" 14490 RETURN 14500 ' erase === 14510 PUT(0,105),WERASE 14520 IF ERS=0 THEN ERS=1:E1=E:E=0 ELSE ERS=0:E=E1 14530 RETURN 14540 ' wide ==== 14550 WDTH=WDTH+1:IF WDTH>3 THEN WDTH=3 14560 PUT(X-DX,Y-DY),ARROW:GOSUB 12690:PUT(X-DX,Y-DY),ARROW 14570 RETURN 14580 'right ==== 14590 PUT(X-DX,Y-DY),ARROW:GET(71,1)-(249,190),SCRM:GET(250,1)-(318,190),SCRR 14600 PUT(71,1),SCRL,PSET:PUT(140,1),SCRM,PSET:PUT(X-DX,Y-DY),ARROW 14610 SCRPOS$="left":RETURN 14620 'left === 14630 PUT(X-DX,Y-DY),ARROW:GET(71,1)-(139,190),SCRL:GET(140,1)-(318,190),SCRM 14640 PUT(71,1),SCRM,PSET:PUT(250,1),SCRR,PSET:PUT(X-DX,Y-DY),ARROW 14650 SCRPOS$="right":RETURN 14660 ' narrow ==== 14670 WDTH=WDTH-1:IF WDTH<1 THEN WDTH=1 14680 PUT(X-DX,Y-DY),ARROW:GOSUB 12690:PUT(X-DX,Y-DY),ARROW 14690 RETURN 14700 ' step ==== 14710 STP=LOOP 14720 RETURN 14730 'tall === 14740 RATIO=RATIO*6/5 14750 RETURN 14760 'flat === 14770 RATIO=RATIO*5/6 14780 RETURN 14790 REM = SUB -- clean the drawing area ==== 14800 LINE (70,0)-(319,191),0,BF 14810 LINE (70,0)-(319,191),CLRB,B 14820 RETURN 14830 ' a one time visibility === 14840 PUT(X-DX,Y-DY),ARROW 14850 RETURN 14860 ' end-end-end ==== 14870 SCREEN 0:WIDTH 80:COLOR 14,1,1:CLS:END 14880 RETURN 14890 ' picture === 14900 GOSUB 11140 14910 A$="" 14920 WHILE A$<>"quit" 14930 GOSUB 11480 14940 IF A$="save" THEN GOSUB 15070 14950 IF A$="load" THEN GOSUB 15220 14960 IF A$="name" THEN GOSUB 15330 14970 IF A$="screen" THEN GOSUB 15390 14980 IF A$="program" THEN GOSUB 16340 14990 IF A$="print" THEN GOSUB 15510 ELSE IF A$="frame" THEN GOSUB 15660 15000 IF A$="files" THEN GOSUB 22460 15010 FOR S=0 TO AVAILSUB:IF A$=SUBNAME$(S) THEN GOSUB 16500 15020 NEXT S 15040 WEND 15050 A$="" 15060 RETURN 15070 ' save ==== 15075 IF LOOP$<>"" THEN NME$=MID$(LOOP$,2) 15080 IF NME$="" THEN GOSUB 15330 15090 DEF SEG=&HB800:GOSUB 15160 15100 CLS:PUT(1,1),SCRL,PSET:PUT(70,1),SCRM,PSET:PUT(249,1),SCRR,PSET 15110 IF FRAME=1 THEN LINE(0,0)-(318,191),3,B 15120 BSAVE NME$+".pic",0,&H4000 15130 GOSUB 11140 : LINE(70,0)-(319,191),CLRB,B ' restore menu & frame 15140 DEF SEG:NME$="":GOSUB 15190 15150 RETURN 15160 PUT(X-DX,Y-DY),ARROW 15170 IF SCRPOS$="right" THEN GET(71,1)-(249,190),SCRM:GET(250,1)-(318,190),SCRR ELSE GET(71,1)-(139,190),SCRL:GET(140,1)-(318,190),SCRM 15180 RETURN 15190 IF SCRPOS$="right" THEN PUT(71,1),SCRM,PSET:PUT(250,1),SCRR,PSET ELSE PUT(71,1),SCRL,PSET:PUT(140,1),SCRM,PSET 15200 PUT(X-DX,Y-DY),ARROW 15210 RETURN 15220 ' load ==== 15230 IF LOOP$<>"" THEN NME$=MID$(LOOP$,2) 15240 IF NME$="" THEN GOSUB 15330 15250 DEF SEG=&HB800:BLOAD NME$+".pic",0 15260 IF ERT=53 OR ERT=52 OR ERT=71 THEN 15280 15270 GET(1,1)-(69,190),SCRL:GET(70,1)-(248,190),SCRM:GET(249,1)-(317,190),SCRR 15280 CLS:GOSUB 11140:PUT(71,1),SCRM,PSET:PUT(250,1),SCRR,PSET:SCRPOS$="right" 15290 DEF SEG:LINE(70,0)-(319,191),CLRB,B:NME$="":PUT(X-DX,Y-DY),ARROW:A$="" 15320 RETURN 15330 ' name ==== 15340 LOCATE 25,30:PRINT"GIVE NAME!";:GOSUB 11480:NME$=A$ 15380 RETURN 15390 ' screen ==== 15410 GOSUB 15160 15430 CLS:PUT(1,1),SCRL,PSET:PUT(70,1),SCRM,PSET:PUT(249,1),SCRR,PSET 15440 IF FRAME=1 THEN LINE(0,0)-(318,191),3,B 15450 IF TM=1 THEN RETURN 15460 LOCATE 25,1:PRINT"hit a key to continue";:WHILE INKEY$="" : WEND:GOSUB 11140 15470 LINE(70,0)-(319,191),CLRB,B : LINE(0,192)-(320,200),0,BF 15480 GOSUB 15190 15500 RETURN 15510 'print ==== 15530 GOSUB 15160 15540 CLS:PUT(1,1),SCRL,PSET:PUT(70,1),SCRM,PSET:PUT(249,1),SCRR,PSET 15550 IF FRAME=1 THEN LINE(0,0)-(318,191),3,B 15560 LOCATE 25,1:PRINT"Is your printer on? Is it (Y/N)?"; 15570 K$="":WHILE K$="":K$=INKEY$:WEND 15580 IF K$<>"y" AND K$<>"Y" AND K$<>"N" AND K$<>"n" THEN 15560 15590 IF K$="N" OR K$="n" THEN 15620 15600 LINE(0,192)-(320,200),0,BF 15610 XPR!=-51973.8:PRNT=VARPTR(XPR!):CALL PRNT 15620 GOSUB 11140 : LINE(70,0)-(319,191),CLRB,B : LINE(0,192)-(320,200),0,BF 15630 GOSUB 15190 15650 RETURN 15660 ' frame === 15670 PUT(0,48),WERASE:IF FRAME=1 THEN FRAME=0 ELSE FRAME=1 15680 RETURN 15690 ' fill ==== 15700 GOSUB 10930:LOCATE 1,1:PRINT "color":PRINT:PRINT:PRINT"design" 15710 PRINT:PRINT:PRINT"quit":A$="" 15720 WHILE A$<>"quit" 15730 GOSUB 11480 15740 IF A$="color" THEN GOSUB 13840 15750 IF A$="design" THEN GOSUB 15820 15760 FOR S=0 TO AVAILSUB:IF A$=SUBNAME$(S) THEN GOSUB 16500 15770 NEXT S 15790 WEND 15800 A$="" 15810 RETURN 15820 ' design fill === 15830 GOSUB 10930 15840 T$(0)=CHR$(&H55)+CHR$(&HAA) 15850 T$(1)=CHR$(&H11)+CHR$(&H22)+CHR$(&H44)+CHR$(88) 15860 T$(2)=CHR$(&HC0) 15870 T$(3)=CHR$(&H3)+CHR$(&HC)+CHR$(&H30)+CHR$(&HC0) 15880 T$(4)=CHR$(&H81)+CHR$(&H18)+CHR$(&H18)+CHR$(&H81) 15890 T$(5)=CHR$(&H2)+CHR$(&H2)+CHR$(&HFF)+CHR$(&H20)+CHR$(&H20)+CHR$(&HFF) 15900 T$(6)=CHR$(&H3C)+CHR$(&HC3)+CHR$(&HC3)+CHR$(&H3C) 15910 T$(7)=CHR$(&H88)+CHR$(&H44)+CHR$(&H22)+CHR$(&H11) 15920 T$(8)=CHR$(&HCC)+CHR$(&H33) 15930 T$(9)=CHR$(&HC0)+CHR$(&H30)+CHR$(&HC)+CHR$(&H3) 15940 T$(10)=CHR$(&H33) 15950 T$(11)=CHR$(&H80)+CHR$(&H20)+CHR$(&H8)+CHR$(&H2)+CHR$(&H8)+CHR$(&H20)+CHR$(&H80) 15960 T$(12)=CHR$(&H18)+CHR$(&H24)+CHR$(&H42)+CHR$(&H81) 15970 T$(16)=CHR$(&HFF)+CHR$(&H3F)+CHR$(&HF)+CHR$(&H3) 15980 T$(14)=CHR$(&H80)+CHR$(&H82)+CHR$(&H84)+CHR$(&HA0) 15990 T$(13)=CHR$(&HAA)+CHR$(&H96)+CHR$(&H96)+CHR$(&HAA) 16000 T$(15)=CHR$(&H0)+CHR$(&HC3)+CHR$(&H3C)+CHR$(&HC3)+CHR$(&H0) 16010 T$(17)=CHR$(&H0)+CHR$(&H28)+CHR$(&H0) 16020 T$(18)=CHR$(&HC0)+CHR$(&HC0)+CHR$(&H30)+CHR$(&H30) 16030 T$(19)=CHR$(&H81)+CHR$(&H81)+CHR$(&H99)+CHR$(&H99)+CHR$(&H81) 16040 LOCATE 1,4:PRINT 0; 16050 LOCATE 1,7:PRINT 1; 16060 LINE(70,0)-(319,191),CLRB,B 16070 FOR I=1 TO 10 16080 LOCATE 2*I+1,1:PRINT I-1 16100 NEXT I 16110 FOR I=1 TO 10 16120 LINE(20,16*I)-(40,16*I+13),,B:LINE(43,16*I)-(63,16*I+13),,B 16150 PAINT(22,16*I+2),T$(I-1):PAINT(48,16*I+2),T$(I+10-1) 16160 NEXT I 16170 LOCATE 23,1:PRINT"quit":A$="" 16180 WHILE A$<>"quit" 16190 GOSUB 11480 16200 FOR S=0 TO AVAILSUB 16210 IF A$=SUBNAME$(S) THEN GOSUB 16500 16220 NEXT S 16230 IF A$>="0" AND A$<="9" THEN PUT(X-DX,Y-DY),ARROW:PAINT(X,Y),T$(VAL(A$)),CLRB:PUT(X-DX,Y-DY),ARROW 16240 WEND 16250 RETURN 16260 ' new === 16270 CLS 16280 GET(1,1)-(69,190),SCRL:GET(70,1)-(248,190),SCRM:GET(249,1)-(317,190),SCRR 16290 LINE(70,0)-(319,191),CLRB,B:PUT(X-DX,Y-DY),ARROW:GOSUB 11410:ERS=0 16330 RETURN 16340 REM == SUB - PROGRAM === 16350 IF LOOP$="" THEN GOSUB 16800:RETURN 16360 NMBR=-1 : PRGRM=1 16370 FOR I=0 TO AVAILSUB 16380 IF SUBNAME$(I)=LOOP$ THEN NMBR=I 16390 NEXT I 16400 IF NMBR=-1 THEN NMBR=AVAILSUB+1 16410 IF NMBR>MAXSUB THEN LOCATE 25,1:PRINT "No space available";:RETURN 16420 SUBNAME$(NMBR)=MID$(LOOP$,2,LEN(LOOP$)-1) 16430 GOSUB 11480 16440 SUB$(NMBR)=A$+LOOP$+CHR$(13) 16450 IF NMBR>AVAILSUB THEN AVAILSUB=NMBR 16470 A$="":PRGRM=0 16480 RETURN 16490 ' endsub - PROGRAM 16500 REM = generating the stack = 16510 ' 16520 CRNTSUB=CRNTSUB+1 16530 IF CRNTSUB>STCKMAX THEN CRNTSUB=STCKMAX : RETURN 16540 STCKNAME$(CRNTSUB)=SUB$(S) 16550 SUBSTCK$(CRNTSUB)=SUB$(S) 16560 STCKLOOP(CRNTSUB)=LOOP 16570 RETURN 16580 ' endsub - stack generation 16590 REM = processing the stack = 16600 ' 16610 B$=LEFT$(SUBSTCK$(CRNTSUB),1) 16620 SUBSTCK$(CRNTSUB)=MID$(SUBSTCK$(CRNTSUB),2) 16630 IF SUBSTCK$(CRNTSUB)="" THEN SUBSTCK$(CRNTSUB)=STCKNAME$(CRNTSUB):STCKLOOP(CRNTSUB)=STCKLOOP(CRNTSUB)-1 16640 IF STCKLOOP(CRNTSUB)<1 THEN CRNTSUB=CRNTSUB-1 16650 RETURN 11570 16660 REM == PROGRAM MENU = 16670 GOSUB 10930 16680 LOCATE 1,1:PRINT "create":PRINT:PRINT"delete":PRINT:PRINT"modify":PRINT 16710 PRINT "list":PRINT:PRINT"display":PRINT:PRINT"rename":PRINT:PRINT"store" 16750 PRINT:PRINT "append":PRINT:PRINT"get":PRINT:PRINT"key" 16780 LOCATE 22,1:PRINT "quit" 16790 RETURN 16800 REM == PROGRAM LAB == 16810 GOSUB 16660:A$="" 16830 WHILE A$<>"quit" 16840 GOSUB 11480 16850 IF A$="create" THEN GOSUB 17010 16860 IF A$="delete" THEN GOSUB 17110 16870 IF A$="modify" THEN GOSUB 18340 16880 IF A$="list" THEN GOSUB 17250 16890 IF A$="display" THEN GOSUB 17460 16900 IF A$="rename" THEN GOSUB 17650 16910 IF A$="store" THEN GOSUB 17870 16920 IF A$="append" THEN GOSUB 17960 16930 IF A$="get" THEN GOSUB 18050 16940 IF A$="key" THEN GOSUB 20030 16950 FOR S=0 TO AVAILSUB:IF A$=SUBNAME$(S) THEN GOSUB 16500 16960 NEXT S 16980 WEND 16990 A$="" 17000 RETURN 17010 ' create === 17020 IF AVAILSUB=MAXSUB THEN LOCATE 25,1:PRINT "No space available";:RETURN 17030 NEWPR=1:GOSUB 17760 17040 IF NMBR>-1 THEN LOCATE 25,1:PRINT A$;" already exists";:A$="":RETURN 17050 LINE(0,192)-(320,200),0,BF 17060 LOCATE 25,20:PRINT "NOW TYPE IT IN"; 17070 LOOP$=CHR$(0)+A$:GOSUB 16340:A$="":NEWPR=0 17100 RETURN 17110 ' delete === 17120 LOCATE 25,1:LOP$=LOOP$:PRINT "Are you sure?(Y/N)"; 17140 GOSUB 11480:IF A$="n" OR A$="N" THEN RETURN 17150 LOOP$=LOP$:GOSUB 17760 17160 IF NMBR=-1 THEN RETURN 17170 AVAILSUB=AVAILSUB-1 17180 FOR I=NMBR TO AVAILSUB 17190 SUB$(I)=SUB$(I+1) 17200 SUBNAME$(I)=SUBNAME$(I+1) 17210 NEXT I 17220 LINE(0,192)-(320,200),0,BF 17230 A$="" 17240 RETURN 17250 ' list === 17260 PUT(X-DX,Y-DY),ARROW:GOSUB 15160 17270 CLS:N=AVAILSUB/24 17280 FOR I=0 TO N 17290 I24=I*24 17300 FOR J=0 TO 23 17310 I24PJ=J+I24 17320 LOCATE 1+J,1+I*7 17330 IF I24PJ<=AVAILSUB THEN PRINT LEFT$(SUBNAME$(I24PJ),7); 17340 NEXT J 17350 NEXT I 17370 LOCATE 25,1:PRINT "press any key to continue";:A$="" 17390 WHILE A$="" 17400 A$=INKEY$ 17410 WEND:GOSUB 16660 17420 GOSUB 15190:PUT(X-DX,Y-DY),ARROW 17430 LINE(0,192)-(320,200),0,BF:LINE(70,0)-(319,191),CLRB,B 17440 A$="" 17450 RETURN 17460 ' display == 17470 GOSUB 17760 17480 IF NMBR=-1 THEN RETURN 17490 LINE(0,192)-(320,200),0,BF 17500 LOCATE 25,1 17510 X$=SUB$(NMBR) 17520 LENGTH=LEN(X$)-1 17530 X$=MID$(X$,1,LENGTH) 17540 I0=1 17550 A$="" 17560 WHILE A$<>CHR$(13) 17570 A$=INKEY$ 17580 IF A$=" " THEN I0=I0+35:LINE(0,192)-(320,200),0,BF 17590 IF I0>LENGTH THEN I0=1 17600 LOCATE 25,1 17610 PRINT MID$(X$,I0,39); 17620 WEND 17630 LINE(0,192)-(320,200),0,BF 17640 RETURN 17650 ' rename === 17660 GOSUB 17760 17670 IF NMBR=-1 THEN RETURN 17680 LINE(0,192)-(320,200),0,BF 17690 LOCATE 25,20 17700 PRINT "Now rename it!"; 17710 GOSUB 11480 17720 SUBNAME$(NMBR)=A$ 17730 LINE(0,192)-(320,200),0,BF 17740 A$="" 17750 RETURN 17760 ' find sub, if exists == 17770 LINE(0,192)-(320,200),0,BF:IF LOOP$<>"" THEN LOOP$=MID$(LOOP$,2) 17780 IF LOOP$="" THEN LOCATE 25,30:PRINT "NAME IT";:GOSUB 11480 ELSE A$=LOOP$ 17810 NMBR=-1: IF AVAILSUB=-1 THEN GOTO 17850 17820 FOR I=0 TO AVAILSUB 17830 IF SUBNAME$(I)=A$ THEN NMBR=I 17840 NEXT I 17850 IF NMBR=-1 AND NEWPR=0 THEN LOCATE 25,1: PRINT "What kind of a name is that?"; 17860 RETURN 17870 ' store == 17880 OPEN "data.sub" FOR OUTPUT AS #1 17890 PRINT #1,AVAILSUB 17900 FOR I=0 TO AVAILSUB 17920 PRINT #1,SUBNAME$(I):PRINT #1,SUB$(I) 17930 NEXT I 17940 CLOSE #1 17950 RETURN 17960 ' append === 17970 OPEN "data.sub" FOR APPEND AS #1 17980 PRINT #1,AVAILSUB 17990 FOR I=0 TO AVAILSUB 18000 PRINT #1,SUBNAME$(I):PRINT #1,SUB$(I) 18020 NEXT I 18030 CLOSE #1 18040 RETURN 18050 ' get == 18060 OPEN "data.sub" FOR INPUT AS #1 18070 ADDSUB = -1 18080 IF NOT EOF(1) THEN INPUT #1,ADDSUB 18090 TWO=ONE+ONE:IF AVAILSUB=-1 AND ADDSUB=-1 THEN RETURN 18100 IF AVAILSUB=-1 AND ADDSUB=-1 THEN RETURN 18110 FOR I=AVAILSUB+1 TO AVAILSUB+ADDSUB+1 18120 INPUT #1,SUBNAME$(I):LINE INPUT #1,SUB$(I) 18140 IF I<>AVAILSUB THEN INPUT #1,WASTE 18150 SUB$(I)=SUB$(I)+CHR$(13) 18160 NEXT I 18170 AVAILSUB=AVAILSUB+ADDSUB+1 18180 IF NOT EOF(1) THEN INPUT #1, ADDSUB:GOTO 18110 18190 CLOSE #1 18200 RETURN 18210 ' error handling === 18220 ERT=ERR:PLAY "o1<bbcddcba#" 18230 WHILE INKEY$<>"":WEND:B$="" 'empty keyboard buffer 18240 :CRNTSUB=-1:LINE(0,192)-(320,200),0,BF 18250 'LOCATE 25,1:PRINT "error ";ERR;" on line ";ERL; 18260 FOR I=0 TO 1000:NEXT I 18270 LINE(0,192)-(320,200),0,BF:LOCATE 25,1 18280 IF ERR=52 OR ERR=71 THEN PRINT"Check your disk drive"; 18290 IF ERR=53 THEN PRINT"File not found"; 18300 IF ERR=67 OR ERR=61 THEN PRINT"Too many files, change diskette"; 18310 IF ERR=5 THEN IF ERL>11480 AND ERL<11680 THEN PRINT"Don't change 1st word";: PRINT" after 2nd began"; ELSE IF ERL=12270 THEN PRINT"Radius is too small for this width"; ELSE PRINT"Box or fix is missing I believe"; 18320 IF ERL=12270 THEN LINE(0,0)-(249,191),CLRB,B 18330 RESUME NEXT 18340 'modify == 18350 GOSUB 17760 18360 IF NMBR=-1 THEN RETURN 18370 LINE(0,192)-(320,200),0,BF 18380 LOCATE 25,1 18390 X$=SUB$(NMBR) 18400 LENGTH=LEN(X$)-1 18410 X$=MID$(X$,1,LENGTH) 18420 I0=1:PRINT MID$(X$,I0,39); 18430 A$="":IC=1 ' current position of the cursor on the 25th line 18440 WHILE A$<>CHR$(13) 18450 A$=INKEY$ 18460 PUT((IC-1)*8,192),CRSR%:PUT((IC-1)*8,192),CRSR% 18470 IF LEN(A$)<>1 THEN 18520 18480 ANS=ASC(A$) 18490 IF ANS<21 OR ANS>122 THEN 18520 18500 X$=MID$(X$,1,I0+IC-2)+A$+MID$(X$,I0+IC,LENGTH) 18510 LOCATE 25,IC:PRINT A$;:IC=IC+1:GOSUB 18810 18520 WHILE LEN(A$)=2 18530 S$=MID$(A$,2,1):ANS=ASC(S$) 18540 IF ANS=82 THEN GOSUB 18680 'ins option 18550 IF ANS=77 THEN IC=IC+1:GOSUB 18810 18560 IF ANS=75 THEN IC=IC-1:GOSUB 18810 18570 IF ANS=83 THEN GOSUB 18640:LINE(0,192)-(320,200),0,BF:LOCATE 25,1: PRINT MID$(X$,I0,39);: 'del option 18580 A$=S$ 18590 WEND 18600 WEND 18610 LINE(0,192)-(320,200),0,BF 18620 SUB$(NMBR)=X$+CHR$(13) 18630 RETURN 18640 'del == 18650 X$=MID$(X$,1,I0+IC-2)+MID$(X$,I0+IC,LENGTH) 18660 LENGTH=LENGTH-1 18670 RETURN 18680 'ins == 18690 A$="":S$="" 18700 WHILE LEN(A$)<>2 AND A$<>CHR$(13) 18710 A$=INKEY$ 18720 PUT((IC-1)*8,192),CRSRI%:PUT((IC-1)*8,192),CRSRI% 18730 IF A$=CHR$(13) OR A$="" OR LEN(A$)=2 THEN 18760 18740 X$=MID$(X$,1,I0+IC-2)+A$+MID$(X$,I0+IC-1,LENGTH):LENGTH=LENGTH+1: LOCATE 25,1:PRINT MID$(X$,I0,39); 18750 IC=IC+1:GOSUB 18810:PUT((IC-1)*8,192),CRSRI%:PUT((IC-1)*8,192),CRSRI% 18760 WEND 18770 IF A$=CHR$(13) THEN S$="":ANS=0:RETURN 18780 S$=MID$(A$,2,1) : ANS=ASC(S$) 18790 RETURN 18800 ' 18810 IF IC>=1 AND IC<=39 THEN RETURN 18820 IF IC<1 THEN IC=1:I0=I0-1:IF I0<1 THEN I0=1 18830 IF IC>39 THEN IC=39:I0=I0+1:IF I0>LENGTH THEN I0=LENGTH 18840 LINE(0,192)-(320,200),0,BF:LOCATE 25,1:PRINT MID$(X$,I0,39); 18850 RETURN 18860 'sprite motion statement 18870 GOSUB 10930 ' erase previous menu 18880 LOCATE 1,1 18890 PRINT "Use ";CHR$(27);CHR$(25);CHR$(26);CHR$(24) 18900 PRINT "to move":PRINT"sprite":PRINT:PRINT"Control":PRINT"speed":PRINT"hitting" 18910 PRINT :PRINT"+ or -":PRINT:PRINT:PRINT"Use":PRINT"Enter":PRINT"key to" 18920 PRINT "quit" 18930 RETURN 18940 ' sprite motion section == 18950 GOSUB 18860:C$="" 18960 WHILE C$<>CHR$(13) 18970 C$=INKEY$:L=LEN(C$):IF L=1 THEN GOSUB 19140 ELSE GOSUB 19020 18980 WEND 18990 A$="":GOSUB 20510 19000 IF TRACK=0 AND D3=0 THEN PUT(0,0),WDOWN ELSE IF D3=0 THEN PUT(0,64),WERASE ELSE PUT(0,80),WUP 19010 RETURN 19020 'sprite response: move = 19030 IF L<>2 THEN RETURN 19040 ANS=ASC(MID$(C$,2,1)) 19050 DELX=0 : DELY=0 19060 IF ANS=71 OR ANS=72 OR ANS=73 THEN DELY=-SPD ELSE IF ANS=79 OR ANS=80 OR ANS=81 THEN DELY= SPD 19070 IF ANS=71 OR ANS=75 OR ANS=79 THEN DELX=-SPD ELSE IF ANS=73 OR ANS=77 OR ANS=81 THEN DELX= SPD 19080 XNEW=XOLD+DELX : YNEW=YOLD+DELY 19090 IF XNEW<71 OR XNEW>319-BOX(0)/2 THEN RETURN 19100 IF YNEW<1 OR YNEW>190-BOX(1) THEN RETURN 19110 IF TRACK=0 AND D3=0 THEN PUT(XOLD,YOLD),BOX:PUT(XNEW,YNEW),BOX ELSE IF D3=1 THEN PUT(XNEW,YNEW),BOX,PSET ELSE PUT(XNEW,YNEW),BOX 19120 XOLD=XNEW : YOLD=YNEW : C$="" : L=0 19130 RETURN 19140 ' sprite response : speed == 19150 IF C$="+" THEN SPD=SPD+1 19160 IF C$="-" THEN SPD=SPD-1:IF SPD<0 THEN SPD=SPD+1 19170 RETURN 19180 'handling variables == 19190 NVAR=VAL(MID$(A$,4,1)) 19200 IF MID$(A$,5,1)<>"=" THEN RETURN 19210 LV$="" : OP$="" : RV$="" : LR=-1 19220 FOR L=6 TO LEN(A$) 19230 LC$=MID$(A$,L,1) 19240 IF INSTR("*+-/^",LC$) THEN OP$=LC$:LR=0 19250 IF LR=-1 THEN LV$=LV$+LC$ ELSE IF LR=1 THEN RV$=RV$+LC$ 19260 IF LR=0 THEN LR=1 19270 NEXT L 19280 IF LEFT$(LV$,3)="var" THEN LV=VAR(VAL(MID$(LV$,4,1))) ELSE LV=VAL(LV$) 19290 IF OP$="" THEN VAR(NVAR)=LV : RETURN 19300 IF LEFT$(RV$,3)="var" THEN RV=VAR(VAL(MID$(RV$,4,1))) ELSE RV=VAL(RV$) 19310 IF OP$="+" THEN VAR(NVAR)=LV+RV 19320 IF OP$="-" THEN VAR(NVAR)=LV-RV 19330 IF OP$="/" THEN IF RV=0 THEN LOCATE 25,1:PRINT"No division by zero,silly!";:RETURN 12140 ELSE VAR(NVAR)=LV/RV 19340 IF OP$="^" THEN VAR(NVAR)=LV^RV 19350 IF OP$="*" THEN VAR(NVAR)=LV*RV 19360 RETURN 12140 19370 ' print out variables == 19380 LOCATE 25,1 19390 FOR I=0 TO 9 19400 PRINT VAR(I); 19410 NEXT I 19420 RETURN 12140 19430 ' status === 19440 A$="":STNUM=1 19450 WHILE A$<>CHR$(13) : A$=INKEY$ 19460 IF A$=" " THEN STNUM=STNUM+1 19470 ON STNUM GOSUB 19510,19550,19560,19550,19640 19480 STNUM=STNUM MOD 6 19490 WEND : LINE(0,192)-(320,200),0,BF 19500 RETURN 12140 19510 LINE(0,192)-(320,200),0,BF:STNUM=STNUM+1 19520 LOCATE 25,1:PRINT "step";STP;:PRINT":width";WDTH*2-1; 19530 IF SCRPOS$="right" THEN F$="west" ELSE F$="east" 19540 PRINT ":";F$;". part"; 19550 RETURN 19560 LINE(0,192)-(320,200),0,BF:STNUM=STNUM+1 19570 LOCATE 25,1:PRINT"ground ";:IF BCKGR>7 THEN PRINT"bright "; 19580 PRINT BCKGR$; 19590 IF PLT=0 THEN IF CLRB=1 THEN F$="green" ELSE IF CLRB=2 THEN F$="red" ELSE IF CLRB=3 THEN F$="brown" ELSE F$=BCKGR$ 19600 IF PLT=1 THEN IF CLRB=1 THEN F$="cyan" ELSE IF CLRB=2 THEN F$="purple" ELSE IF CLRB=3 THEN F$="white" ELSE F$=BCKGR$ 19610 PRINT":arrow ";F$; 19620 RETURN 19630 LOCATE 25,1:PRINT"arrow position: x=";MID$(STR$(X),2);" y=";MID$(STR$(Y),2); 19640 LINE(0,192)-(320,200),0,BF:STNUM=STNUM+1 19650 LOCATE 25,1:PRINT"arrow position: x=";MID$(STR$(X),2);" y=";MID$(STR$(Y),2); 19660 RETURN 19670 ' text section === 19680 GOSUB 10930 ' erase previous menu 19690 LOCATE 1,1 19700 PRINT "Use ";CHR$(27);CHR$(25);CHR$(26);CHR$(24) 19710 PRINT "to move":PRINT"cursor":PRINT:PRINT:PRINT:PRINT"Use" 19720 PRINT "Enter":PRINT"key to":PRINT"quit" 19730 ' 19740 ASPD=8:AXOLD=72:AYOLD=0:AXNEW=AXOLD:AYNEW=AYOLD 19750 PUT(AXOLD,AYOLD),TEXTCRS% 19760 PUT(X-DX,Y-DY),ARROW:C$="" 19770 WHILE C$<>CHR$(13) 19780 C$=INKEY$:L=LEN(C$):IF L=1 THEN GOSUB 19950 ELSE GOSUB 19820 19790 WEND 19800 PUT(X-DX,Y-DY),ARROW:PUT(AXNEW,AYNEW),TEXTCRS%:GOSUB 10930 19810 RETURN 19820 'text response: move === 19830 IF L<>2 THEN RETURN 19840 ANS=ASC(MID$(C$,2,1)) 19850 ADELX=0 : ADELY=0 19860 IF ANS=71 OR ANS=72 OR ANS=73 THEN ADELY=-ASPD ELSE IF ANS=79 OR ANS=80 OR ANS=81 THEN ADELY= ASPD 19870 IF ANS=71 OR ANS=75 OR ANS=79 THEN ADELX=-ASPD ELSE IF ANS=73 OR ANS=77 OR ANS=81 THEN ADELX= ASPD 19880 AXNEW=AXOLD+ADELX : AYNEW=AYOLD+ADELY 19890 IF AXNEW<72 OR AXNEW>304 THEN AXNEW=AXOLD:RETURN 19900 IF AYNEW<0 OR AYNEW>184 THEN AYNEW=AYOLD:RETURN 19910 PUT(AXOLD,AYOLD),TEXTCRS%:PUT(AXNEW,AYNEW),TEXTCRS% 19920 AXOLD=AXNEW : AYOLD=AYNEW : C$="" : L=0 19930 RETURN 19940 ' 19950 ' text response : print 19960 IF ASC(C$)>8 AND ASC(C$)<14 THEN RETURN 19970 AX=AXOLD/8+1 : AY=AYOLD/8+1:LOCATE AY,AX:PRINT C$;:AXNEW=AXOLD+ASPD 19980 IF AXNEW>304 THEN AXNEW=72 : AYNEW=AYOLD+ASPD 19990 IF AYNEW>184 THEN AYNEW=0 20000 PUT(AXNEW,AYNEW),TEXTCRS% 20010 AXOLD=AXNEW : AYOLD=AYNEW 20020 RETURN 20030 'key - program ==== 20040 PRGRM=1:LOCATE 25,20 : PRINT"What number (1-10)?";:GOSUB 11480 20050 K=VAL(A$) : IF K<1 OR K>10 THEN 20040 20060 LOCATE 25,5 : PRINT"Define it! Shorter than 15 symbols!"; 20070 GOSUB 11480:K$=A$ 20080 LOCATE 25,10:PRINT"Add ENTER (";CHR$(17);CHR$(196);CHR$(217);") key (Y/N)?"; 20090 GOSUB 11480:IF A$="y" THEN K$=K$+CHR$(13) 20100 KEY(K) OFF:KEY K,K$:PRGRM=0 20110 RETURN 20120 'net ===== 20130 X1=X MOD STP : Y1=Y MOD STP : STP3=STP*3 20140 NX=320/STP3 : NY=200/STP3 20150 FOR I=1 TO NX : XD=X1+(I-1)*STP3 : IF XD<=70 OR XD=>319 THEN 20190 20160 FOR J=1 TO NY : YD=Y1+(J-1)*STP3 : IF YD<=1 OR YD=>191 THEN 20180 20170 PUT(XD-1,YD-1),PNT% 20180 NEXT J 20190 NEXT I 20200 RETURN 20210 ' undo === 20230 PUT(X-DX,Y-DY),ARROW 20240 GOSUB 15190 20250 RETURN 20260 'sprite definition section 20270 D3=0:TRACK=0:SPD=8:XOLD=X:YOLD=Y:GOSUB 20510:PUT(0,0),WDOWN 20280 PUT(X-DX,Y-DY),ARROW 20290 A$="" 20300 WHILE A$<>"quit" 20310 GOSUB 11480 20320 IF A$="move" THEN GOSUB 20820 20330 IF A$="reverse" THEN GOSUB 20440 20340 IF A$="ns-flip" THEN GOSUB 20580 20350 IF A$="ew-flip" THEN GOSUB 20670 20360 IF A$="track" THEN GOSUB 20760 20370 IF A$="3d" THEN GOSUB 20890 20380 IF A$="start" THEN IF RUBON=0 THEN GOSUB 18940 ELSE GOSUB 21080 20390 IF A$="rotate" THEN GOSUB 20950 20400 IF A$="rubber" THEN GOSUB 21060 20410 WEND 20420 PUT(X-DX,Y-DY),ARROW:A$="":GOSUB 11040:RUBON=0 20430 RETURN 12140 20440 'reverse sprite 20450 PUT(XOLD,YOLD),BOX 20460 FOR I=2 TO IN 20470 BOX(I)=BOX(I) XOR -1 20480 NEXT I 20490 PUT(XOLD,YOLD),BOX:GOSUB 18940 20500 RETURN 20510 'sprite menu 20520 GOSUB 10930 20530 LOCATE 1,1:PRINT"move" 20540 PRINT:PRINT"reverse":PRINT:PRINT"ns-flip":PRINT:PRINT"ew-flip" 20550 PRINT:PRINT"track":PRINT:PRINT"3D":PRINT:PRINT"start" 20560 PRINT:PRINT"rotate":PRINT:PRINT"rubber":PRINT:PRINT:PRINT"quit" 20570 RETURN 20580 'ns-flip 20590 IY=BOX(1)-1+YOLD 20600 FOR I=0 TO BOX(0)/2-1:XX=XOLD+I 20610 FOR J=1 TO BOX(1)/2:J1=J-1:Y1=YOLD+J1:Y2=IY-J1 20620 B1=POINT(XX,Y1):B2=POINT(XX,Y2):PSET(XX,Y1),B2:PSET(XX,Y2),B1 20630 NEXT J 20640 NEXT I 20650 GET(XOLD,YOLD)-(XOLD+BOX(0)/2-1,YOLD+BOX(1)-1),BOX 20660 RETURN 20670 'ew-flip 20680 IX=BOX(0)/2-1+XOLD 20690 FOR I=1 TO BOX(0)/4:I1=I-1:X1=XOLD+I1:X2=IX-I1 20700 FOR J=0 TO BOX(1)-1:YY=YOLD+J 20710 B1=POINT(X1,YY):B2=POINT(X2,YY):PSET(X1,YY),B2:PSET(X2,YY),B1 20720 NEXT J 20730 NEXT I 20740 GET(XOLD,YOLD)-(XOLD+BOX(0)/2-1,YOLD+BOX(1)-1),BOX 20750 RETURN 20760 'track 20770 IF TRACK=1 THEN RETURN ELSE PUT(0,64),WERASE:TRACK=1 20780 IF D3=0 THEN PUT(0,0),WDOWN ELSE PUT(0,80),WUP:D3=0 20790 IF RUBON=1 THEN GOSUB 21080:RETURN 20800 GOSUB 18940 20810 RETURN 20820 'move 20830 IF TRACK=0 AND D3=0 THEN RETURN ELSE PUT(0,0),WDOWN 20840 IF TRACK=1 THEN PUT(0,64),WERASE ELSE PUT(0,80),WUP 20860 TRACK=0:D3=0:IF RUBON=1 THEN GOSUB 21080:RETURN 20870 GOSUB 18940 20880 RETURN 20890 '3D 20900 IF D3=1 THEN RETURN ELSE PUT(0,80),WUP:D3=1 20910 IF TRACK=0 THEN PUT(0,0),WDOWN ELSE PUT(0,64),WERASE:TRACK=0 20920 IF RUBON=1 THEN GOSUB 21080:RETURN 20930 GOSUB 18940 20940 RETURN 20950 'rotate 20960 IF BOX(0)/2<>BOX(1) THEN LOCATE 25,1:PRINT"The box is not square, sorry";: RETURN 20970 B=BOX(1):A2=B-2:A1X=XOLD+B-1:A1Y=YOLD+B-1 20980 FOR I=0 TO A2:AXI=A1X-I:AYI=A1Y-I:XI=XOLD+I:YI=YOLD+I 20990 FOR J=I TO A2-I:AXJ=A1X-J:AYJ=A1Y-J:XJ=XOLD+J:YJ=YOLD+J 21000 BO=POINT(XI,YJ):PSET(XI,YJ),POINT(AXJ,YI):PSET(AXJ,YI),POINT(AXI,AYJ) 21010 PSET(AXI,AYJ),POINT(XJ,AYI):PSET(XJ,AYI),BO 21020 NEXT J 21030 NEXT I 21040 GET(XOLD,YOLD)-(XOLD+BOX(1)-1,YOLD+BOX(1)-1),BOX 21050 RETURN 21060 ' rubber motion section == 21070 IF RUBON=0 THEN RUBON=1 ELSE RUBON=0:PUT(0,128),WUP:PUT(16,128),WDOWN 21080 IF RUBON=0 THEN RETURN 21090 GOSUB 18860:C$="":PUT(XOLD-1,YOLD-1),BRUBV 21100 IF D3=1 OR TRACK=1 THEN PUT(XOLD,YOLD),BRUB,PSET 21110 WHILE C$<>CHR$(13) 21120 C$=INKEY$:L=LEN(C$):IF L=1 THEN GOSUB 19140 ELSE GOSUB 21180 21130 WEND 21140 A$="":GOSUB 20510:PUT(0,128),WUP:PUT(16,128),WDOWN 21150 IF TRACK=0 AND D3=0 THEN PUT(0,0),WDOWN ELSE IF D3=0 THEN PUT(0,64),WERASE ELSE PUT(0,80),WUP 21160 PUT(XOLD-1,YOLD-1),BRUBV 21170 RETURN 21180 'rubber response: move = 21190 IF L<>2 THEN RETURN 21200 DELX=0:DELY=0:ANS=ASC(MID$(C$,2,1)) 21220 IF ANS=71 OR ANS=72 OR ANS=73 THEN DELY=-SPD ELSE IF ANS=79 OR ANS=80 OR ANS=81 THEN DELY= SPD 21230 IF ANS=71 OR ANS=75 OR ANS=79 THEN DELX=-SPD ELSE IF ANS=73 OR ANS=77 OR ANS=81 THEN DELX= SPD 21240 XNEW=XOLD+DELX : YNEW=YOLD+DELY 21250 IF XNEW<71 OR XNEW>319-BRUB(0)/2 THEN RETURN 21260 IF YNEW<1 OR YNEW>190-BRUB(1) THEN RETURN 21270 PUT(XOLD-1,YOLD-1),BRUBV:PUT(XNEW-1,YNEW-1),BRUBV 21280 IF D3=1 OR TRACK=1 THEN PUT(XNEW,YNEW),BRUB,PSET 21290 XOLD=XNEW : YOLD=YNEW : C$="" : L=0 21300 RETURN 21310 'interup a crazy subroutine, press F10 21320 CRNTSUB=-1 21330 RETURN 21340 'if.neg 21350 IF MID$(LOOP$,1,4)<>" var" THEN RETURN 21360 NVAR$=MID$(LOOP$,5,1):IF NVAR$<"0" OR NVAR$>"9" THEN RETURN 21370 NVAR=VAL(NVAR$) : IF VAR(NVAR)<0 THEN SUBSTCK$(CRNTSUB)="" 21380 RETURN 21390 'week 21400 TM=1:GOSUB 15390:CLS:TM=0 21410 SC=240:TC=90:R=20:RR=15:S=0:T=-1:SS=0:TT=-1:FSTSLOW=1:LEVEL=10:HM=10 21420 LINE(240,65)-(240,68):LINE(240,115)-(240,112):AMPM$="A":H=0:HOUR=0 21430 LINE(215,90)-(218,90):LINE(265,90)-(262,90):MIN=0:DAYSTART=0:DAY=0 21440 FI=3.14159*HM/30:CS=COS(FI):SN=SIN(FI):CS1=COS(FI/2):SN1=SIN(FI/2) 21450 FOR I=1 TO 7:DAY=DAY+1:GOSUB 21490:NEXT I 21460 DAYSTART=1:DAY=DAYREM-1:CIRCLE(SC,TC),25,3,,,RATIO:GOSUB 21730 21470 PUT(X-DX,Y-DY),ARROW:GOSUB 20210:LINE(70,0)-(319,191),CLRB,B:DAYREM=DAY 21480 RETURN 21490 ' days 21500 CORNER=(DAY+1)*2:C1=(2*DAY+3)*8:IF DAY=1 THEN CORNER=18 21510 C2=(CORNER-1)*8+1 21520 LOCATE CORNER,12:PRINT DAYS$(DAY-1):LINE(86,C2-3)-(161,C2+8),3,B 21530 IF DAYSTART=1 THEN PUT(88,C1),WERASE,PSET:PUT(128,C1),WDOWN,PSET 21540 RETURN 21550 ' days bonus 21560 LOCATE 25,10:PRINT"What day is it?";:GOSUB 11480 21570 IF INSTR(DAYS$(DAY MOD 7),MID$(A$,2)) THEN GOSUB 21590 21580 RETURN 21590 SCORE=SCORE+LEVEL:LOCATE 18,37:PRINT MID$(STR$(SCORE),2) 21600 A$="L2DF+L1A":B$="L4MSGF+E":PLAY"MBT200O3"+A$+A$+B$+"F+"+B$+"L2AAA":GOSUB 22280:GOSUB 21620 21610 RETURN 21620 DAY=DAY+1:IF DAY=8 THEN DAY=1 21630 IF DAYSTART=1 THEN GOSUB 21490 21640 RETURN 21650 'clock 21660 TM=1:GOSUB 15390:TM=0:DEF SEG=&HB800 : BLOAD "clock.pic" 21670 SC=181 : TC=96 : HM=1 : FI=3.14159/30 : CS=COS(FI) : SN=SIN(FI) 21680 R=65:RR=40:S=SREM:T=TREM:SS=SSREM:TT=TTREM:H=HREM:MIN=MINREM:HOUR=HOUREM 21690 AMPM$=AMPMREM$:CS1=COS(FI/2):SN1=SIN(FI/2):DAYSTART=0:GOSUB 21730 21700 MINREM=MIN:HREM=H:HOUREM=HOUR:SREM=S:TREM=T:SSREM=SS:TTREM=TT:AMPMREM$=AMPM$ 21710 PUT(X-DX,Y-DY),ARROW:GOSUB 20210:LINE(70,0)-(319,191),CLRB,B:DEF SEG 21720 RETURN 21730 'clock drawing and the clock game 21740 LINE(70,0)-(319,191),CLRB,B:PAINT(72,3),1,3 21750 LOCATE 19,35:PRINT"score":LOCATE 18,37:PRINT MID$(STR$(SCORE),2):GOSUB 22190 21760 GOSUB 22250 21770 LINE (SC,TC)-(SC+S*R,TC+T*R):LINE(SC,TC)-(SC+SS*RR,TC+TT*RR),2:C$="" 21780 WHILE C$<>" " 21790 C$=INKEY$:IF C$=CHR$(13) THEN GOSUB 22020 21800 IF C$="+" THEN FSTSLW=1 ELSE IF C$="-" THEN FSTSLW=0 21810 S1=S*CS-T*SN : T1=T*CS+S*SN : IF FSTSLW=0 THEN GOSUB 21960 21820 LINE(SC,TC)-(SC+S*R,TC+T*R),0 : LINE(SC,TC)-(SC+SS*RR,TC+TT*RR),2 21830 LINE(SC,TC)-(SC+S1*R,TC+T1*R) 21840 MIN=MIN+HM : H=H+HM : S=S1 : T=T1 : IF MIN=60 THEN MIN=0 : S=0 : T=-1 21850 IF H=6*HM THEN GOSUB 21890 ELSE IF FSTSLW=0 THEN FOR I=1 TO 100 : NEXT I 21860 LOCATE 25,32:PRINT STR$(INT(HOUR/10));":";MID$(STR$(MIN),2);" "; 21870 WEND 21880 RETURN 21890 SS1=SS*CS1-TT*SN1 : TT1=TT*CS1+SS*SN1 21900 LINE(SC,TC)-(SC+SS*RR,TC+TT*RR),0 : LINE(SC,TC)-(SC+S*R,TC+T*R) 21910 LINE(SC,TC)-(SC+SS1*RR,TC+TT1*RR),2 21920 SS=SS1 : TT=TT1 : H=0 : HOUR=HOUR+HM : LOCATE 10,36 21930 IF HOUR=120 THEN S1=0:T1=-1 : IF AMPM$="P" THEN AMPM$="A":HOUR=0:GOSUB 22250 ELSE AMPM$="P":GOSUB 22250 21940 IF AMPM$="P" THEN IF HOUR=>130 THEN HOUR=HOUR-120 21950 RETURN 21960 ' 21970 PLAY "mb" 21980 SOUND 450,0.25 : SOUND 100,0 : FOR J=1 TO 5 : NEXT J 21990 SOUND 70,0.25 : SOUND 100,0 22000 FOR I=1 TO 200:NEXT I 22010 RETURN 22020 'clock game 22030 LINE(0,192)-(320,200),0,BF:IF DAYSTART=1 THEN GOSUB 21550:RETURN 22040 DMIN=-1:LOCATE 25,10:PRINT"choose level (1-5)";:GOSUB 11480:LEVEL=VAL(A$) 22050 IF A$<"1" OR A$>"5" THEN 22030 22060 IF A$="5" THEN DMIN=0 ELSE IF A$="4" THEN DMIN=1 ELSE IF A$="3" THEN DMIN=2 ELSE IF A$="2" THEN DMIN=3 22070 LOCATE 25,10:PRINT "hour?";:GOSUB 11480:VA10=VAL(A$)*10 22080 IF VA10<=HOUR AND HOUR<(VA10+10) THEN GOSUB 22130 ELSE RETURN 22090 IF DMIN=-1 THEN RETURN 22100 LOCATE 25,10:PRINT"minutes?";:GOSUB 11480 22110 IF MIN-DMIN<=VAL(A$) AND VAL(A$)<=MIN+DMIN THEN GOSUB 22160 ELSE RETURN 22120 RETURN 22130 SCORE=SCORE + 1 :LOCATE 18,37:PRINT MID$(STR$(SCORE),2):A$="MBO3T230L2CGCGCL1GL2GL4A-":B$="MSGFE-DC":PLAY A$+B$+B$ 22140 GOSUB 22280 22150 RETURN 22160 SCORE=SCORE+LEVEL:LOCATE 18,37:PRINT MID$(STR$(SCORE),2):PLAY"MBO3T190L4FEDFEDFMSAABCCCCDEDEDEDCCBBMF" 22170 GOSUB 22280 22180 RETURN 22190 'clock menu 22200 GOSUB 10930:LOCATE 1,1 22210 PRINT "Press":PRINT CHR$(17);CHR$(196);CHR$(217)+" key" 22220 PRINT "to play":PRINT:PRINT:PRINT"+ fast":PRINT"- slow":PRINT:PRINT 22230 PRINT:PRINT:PRINT"Press":PRINT"space":PRINT"bar":PRINT"to quit" 22240 RETURN 22250 LOCATE 10,36 : PRINT AMPM$+".M."': PAINT(292,77),1,3 22260 IF AMPM$="A" THEN GOSUB 21620 22270 RETURN 22280 'faces 22290 LOCATE 18,1:PRINT STRING$(6,CHR$(1)):I0=0:A$="$" 22300 LOCATE 20,3:PRINT CHR$(2);CHR$(2):LOCATE 21,3:PRINT CHR$(2) 22310 FOR J=1 TO 5 22320 FOR I=1 TO 5:GOSUB 22390:LOCATE 18+I,6:PRINT CHR$(1):LOCATE 18,I :PRINT " ":NEXT I 22330 FOR I=1 TO 5:GOSUB 22390:LOCATE 23,6-I:PRINT CHR$(1):LOCATE 17+I,6:PRINT " ":NEXT I 22340 FOR I=1 TO 5:GOSUB 22390:LOCATE 23-I,1:PRINT CHR$(1):LOCATE 23,7-I:PRINT " ":NEXT I 22350 FOR I=1 TO 5:GOSUB 22390:LOCATE 18,I+1:PRINT CHR$(1):LOCATE 24-I,1:PRINT " ":NEXT I 22360 NEXT J 22370 FOR I=1 TO 6:LOCATE 18,7-I:PRINT " ":NEXT I:LOCATE 21,3:PRINT " " 22380 RETURN 22390 I0=I0+1 22400 ON I0 GOTO 22410,22420,22430,22440 22410 LOCATE 21,4:PRINT CHR$(2):LOCATE 21,3:PRINT " ":RETURN 22420 LOCATE 20,4:PRINT CHR$(2):LOCATE 21,4:PRINT " ":RETURN 22430 LOCATE 20,3:PRINT CHR$(2):LOCATE 20,4:PRINT " ":RETURN 22440 LOCATE 21,3:PRINT CHR$(2):LOCATE 20,3:PRINT " ":I0=0:RETURN 22450 RETURN 22460 'files 22470 TM=1:GOSUB 15390:CLS:TM=0 22480 D$="a":IF LOOP$<>"" THEN D$=MID$(LOOP$,2) 22490 FILES D$+":*.pic" 22500 IF ERT=53 OR ERT=71 OR ERT=52 THEN 22530 22510 LOCATE 25,10:PRINT"hit a key to continue":WHILE INKEY$="":WEND 22520 LINE(0,192)-(320,200),0,BF 22530 GOSUB 11140 22540 PUT(X-DX,Y-DY),ARROW:GOSUB 20210:LINE(70,0)-(319,191),CLRB,B:ERT=0 22550 RETURN